#include "Arbre.h"
#include <vector>

/**
*Classe Permettant de 
*/
template <class T, int n>
class ArbreNaire:public Arbre<T>{
	friend class iterator;
	typedef std::vector<ArbreNaire<T, n>* > TabArb;
	public:	
		ArbreNaire(): Arbre<T>(){
			lesfils_= new TabArb(n);
		}
		~ArbreNaire(){}
		class iterator;		
		iterator begin();
		iterator end();
	private:
		TabArb lesfils_;
		T val;
	
};

/**
*Specialisation du template pour n=2 mais l'implémentation se fera dans la Classe Arbre Binaire
*
*Nous avous fais le choix que l'utilisateur ne peut pas cree d'arbre n-aire d'ordre 2 s'il veux en crée il devra
*passe pas la Class ArbreBinaire
*/
template <class T>
class ArbreNaire<T,2>:public Arbre<T>{
	friend class iterator_2;
	public:	
		~ArbreNaire(){}
		virtual ArbreNaire<T,2> getfilsg()=0;
		virtual ArbreNaire<T,2> getfilsd()=0;
		class iterator_2;
		 iterator_2 begin();
		 iterator_2 end();
	protected:
	ArbreNaire(): Arbre<T>(){}
	ArbreNaire(const ArbreNaire<T,2>& a);
};


/**
 *Declaration d'un iterateur pour les arbre d'ordre n!=2
 */
template <class T , int  n>
class ArbreNaire<T,n>::iterator :
public  Arbre<T>::AbstractIterator
{
/*Nous n'avons pas eut le temps d'impléter le corps  de la class*/
};

/**
*Inplémentation de l'iterateir
*/
template <class T>
class ArbreNaire<T,2>::iterator_2:
public  Arbre<T>::AbstractIterator{
};
